<?php
require_once('\Views\ManageUsersView.php');
require_once('\Common\Strings.php');
require_once('\Models\UserRegister.php');
require_once('\Models\User.php');
require_once('\Models\ManageUsersModel.php');
require_once('\Views\PageView.php');

class ManageUsersController
{	
	/**
	 * Skapar kontroll för registrering av ny användare
	 * @return String $html
	 */
	public function createControl()
	{
		$muv = new ManageUsersView();
		$db = new Database();
		$mum = new ManageUsersModel($db);
		$ur = new UserRegister();
		$pv = new PageView();

		
		// Anslut till databasen
		if(!$db->Connect(new DBConfig()))
		{
			$html .= $pv->setStatusText(Strings::DB_CONNECTION_ERROR, false);
			return $html;			
		}
		
		/*********************************************
		 *		 		SKAPA NY ANVÄNDARE
		 ********************************************/
			
		$html = $muv->getRegisterHeader();
		
		// Om användaren försökt skapa ny användare
		if($muv->triedToCreateUser())
		{
			// Försök skapa användare. Sparar eventuella fel i $errors
			$errors = $mum->createUser($muv->getUserName(), $muv->getPassword(), $muv->getRepeatedPassword(), 6);
			
			// Om fel uppstod vid validering
			if(count($errors)>0)
			{	
				foreach ($errors as $error)
					$html .= $pv->setStatusText($error, false);
			}
			else
			{
				$url = $pv->getNewPageURL($muv->status,$muv->userCreated);
				header("Refresh: 0; url=$url");
			}
		}
		// Skriv ut meddelande om ny användare har skapats
		if($muv->userCreated())
			$html .= $pv->setStatusText(Strings::DB_USER_CREATED, true);
		
		// Hämtar formulär för registrering av användare
		$html .= $muv->getRegisterForm();
		
		
		/*********************************************
		 *		 		LISTA ANVÄNDARE
		 ********************************************/
		
		$html .= $muv->getListHeader();

		// Hämtar registrerade användare
		$allUsers = $ur->getUsers($db);
		
		// Om arrayen är av fel klass
		if (get_class($allUsers) != "UserArray")
		{
			$html .= $pv->setStatusText(Strings::DB_RETURN_TYPE_ERROR, false);
			return $html;
		}
		
		// Om användaren försökte ta bort en användare
		if($muv->triedToDeleteUser())
		{
			// Om borttagningen lyckas
			if($mum->deleteUser($muv->getUserID()))
			{
				// Ladda om sidan
				$url = $pv->getNewPageURL($muv->status, $muv->userDeleted);
				header("Refresh: 0; url=$url");
			}
			else
				$html .= $pv->setStatusText(Strings::DB_USER_NOT_DELETED, false);
		}
		// Om en användare har tagits bort
		if($muv->userDeleted())
			$html .= $pv->setStatusText(Strings::DB_USER_DELETED, true);
			
		
		$html .= $muv->getUsersList($allUsers);
		
		return $html; 
	}
}

?>